---
title: 逆向工程
sidebar_position: 4
---

# 逆向工程

## 软件复用

<RedSpan>软件复用是将已有软件的各种有关知识用于建立新的软件</RedSpan>，以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是<RedSpan>代码级复用</RedSpan>，被复用的知识专指程序，后来扩大到包括<RedSpan>领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等</RedSpan>一切有关方面。

## 逆向工程概念

<RedSpan>软件的逆向工程是分析程序，力图在比源代码更高抽象层次上建立程序的表示过程</RedSpan>。逆向工程是设计的恢复过程。逆向工程的四个级别：

1. <RedSpan>实现级</RedSpan>：包括程序的抽象语法树、符号表、过程的设计表示。
2. <RedSpan>结构级</RedSpan>：包括反映程序分量之间相互依赖关系的信息，例如调用图、结构图、程序和数据结构。
3. <RedSpan>功能级</RedSpan>：包括反映程序段功能及程序段之间关系的信息，例如数据和控制流模型。
4. <RedSpan>领域级</RedSpan>：包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息，例如E-R模型。

其中，<RedSpan>领域级抽象级别最高，完备性最低；实现级抽象级别最低，完备性最高</RedSpan>。

## 与逆向工程相关的概念

与逆向工程相关的概念有重构、设计恢复、再工程和正向工程。

1. <RedSpan>重构是指在同一抽象级别上转换系统描述形式</RedSpan>。

2. <RedSpan>设计恢复是指借助工具从已有程序中抽取出有关数据设计、总体结构设计和过程设计等方面的信息</RedSpan>。

3. <RedSpan>再工程是指在逆向工程所获信息的基础上，修改或重构已有的系统，产生系统的一个新版本</RedSpan>。再工程是对现有系统的重新开发过程，包括<RedSpan>逆向工程、新需求的考虑过程和正向工程三个步骤</RedSpan>。它不仅能从已存在的程序中重新获得设计信息，而且还能使用这些信息来重构现有系统，以改进它的综合质量。在利用再工程重构现有系统的同时，一般会<RedSpan>增加新的需求，包括增加新的功能和改善系统的性能</RedSpan>。

4. <RedSpan>正向工程是指不仅从现有系统中恢复设计信息，而且使用该信息去改变或重构现有系统，以改善其整体质量</RedSpan>。

